package com.wangcanxuan.www.controller;

import com.wangcanxuan.www.annotation.exception.ExceptionHandler;
import com.wangcanxuan.www.entity.dto.ResultInfo;
import com.wangcanxuan.www.entity.po.Tribe;
import com.wangcanxuan.www.entity.po.User;

import java.util.List;

/**
 * 部落界面的Controller
 *
 * @author HHLJ
 * @date 2022/03/28
 */
public interface TribeController {

    /**
     * 返回创建部落的结果信息
     *
     * @param user      用户
     * @param tribeName 部落的名字
     * @return {@link ResultInfo}<{@link ?}>
     */
    @ExceptionHandler
    ResultInfo<String> createTribe(User user, String tribeName);

    /**
     * 返回选择当前阵营所有部落营地列表的结果信息
     *
     * @param campId 营id
     * @param count  数
     * @return {@link ResultInfo}<{@link List}<{@link Tribe}>>
     */
    @ExceptionHandler
    ResultInfo<List<Tribe>> selectAllCampTribeList(int campId, int count);

    /**
     * 返回选择当前阵营搜索部落列表的结果信息
     *
     * @param campId    营id
     * @param tribeName 部落的名字
     * @param pageCount 页面数
     * @return {@link ResultInfo}<{@link List}<{@link Tribe}>>
     */
    @ExceptionHandler
    ResultInfo<List<Tribe>> selectSearchTribeList(int campId, String tribeName, int pageCount);

    /**
     * 返回通过部落id获得当前所在部落的结果信息
     *
     * @param tribeId 部落id
     * @return {@link ResultInfo}<{@link Tribe}>
     */
    @ExceptionHandler
    ResultInfo<Tribe> selectTribeByTribeId(String tribeId);


    /**
     * 返回部落搜索成员功能的结果信息
     *
     * @param tribeId    部落id
     * @param searchName 搜索的名字
     * @param gender     性别
     * @param pageCount  页面数
     * @return {@link ResultInfo}<{@link List}<{@link User}>>
     */
    @ExceptionHandler
    ResultInfo<List<User>> selectUserListByGenderAndTribeId(String tribeId, String searchName, String gender, int pageCount);


    /**
     * 返回踢出部落的结果信息
     *
     * @param user       用户
     * @param chooseName 选择的名字
     * @return {@link ResultInfo}<{@link ?}>
     */
    @ExceptionHandler
    ResultInfo<String> kickTribe(User user, String chooseName);


    /**
     * 返回获得部落当前人数的结果信息
     *
     * @param tribeId 部落id
     * @return {@link ResultInfo}<{@link Integer}>
     */
    @ExceptionHandler
    ResultInfo<Long> selectNumbersForTribe(String tribeId);

    /**
     * 返回退出部落的结果信息
     *
     * @param user 用户
     * @return {@link ResultInfo}<{@link ?}>
     */
    @ExceptionHandler
    ResultInfo<String> exitTribe(User user);


    /**
     * 返回金币贡献的结果信息
     *
     * @param user        用户
     * @param coinToCoins 硬币硬币
     * @return {@link ResultInfo}<{@link ?}>
     */
    @ExceptionHandler
    ResultInfo<String> coinToCoins(User user, int coinToCoins);

    /**
     * 返回金币换战力的结果信息
     *
     * @param tribe       部落
     * @param coinToPower 硬币权力
     * @return {@link ResultInfo}<{@link ?}>
     */
    @ExceptionHandler
    ResultInfo<String> coinToPower(Tribe tribe, int coinToPower);

    /**
     * 返回升级部落的结果信息
     *
     * @param tribe 部落
     * @return {@link ResultInfo}<{@link ?}>
     */
    @ExceptionHandler
    ResultInfo<String> levelUp(Tribe tribe);

    /**
     * 返回解散部落的结果信息
     *
     * @param tribeId 部落id
     * @return {@link ResultInfo}<{@link ?}>
     */
    @ExceptionHandler
    ResultInfo<String> dismissTribe(String tribeId);

    /**
     * 返回部落签到的结果信息
     *
     * @param user 用户
     * @return {@link ResultInfo}<{@link ?}>
     */
    @ExceptionHandler()
    ResultInfo<String> tribeSignIn(User user);

    /**
     * 返回授权结果信息
     *
     * @param user       用户
     * @param chooseName 选择的名字
     * @param roleId     角色id
     * @return {@link ResultInfo}<{@link ?}>
     */
    @ExceptionHandler
    ResultInfo<String> permissionGive(User user, String chooseName, int roleId);
}
